package optiondialoges;

import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JLabel;
import javax.swing.JTextField;

import panel.GlyphPanel;


import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.Serializable;

public class ThresholdOptionDialog extends JDialog implements ActionListener, WindowListener, Serializable{

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel buttonPanel = null;
	private JPanel optionPanel = null;
	private JButton okButton = null;
	private JButton cancelButton = null;
	private JLabel lowerLabel = null;
	private JTextField lowerTextField = null;
	private JLabel upperLabel = null;
	private JTextField upperTextField = null;
	private GlyphPanel panel;
	private String upper;
	private String lower;

	/**
	 * @param owner
	 */
	public ThresholdOptionDialog(Frame owner,GlyphPanel panel) {
		super(owner);
		this.panel=panel;
		this.addWindowListener(this);
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(223, 169);
		this.setContentPane(getJContentPane());
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getButtonPanel(), BorderLayout.SOUTH);
			jContentPane.add(getOptionPanel(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	/**
	 * This method initializes buttonPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getButtonPanel() {
		if (buttonPanel == null) {
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.gridx = 1;
			gridBagConstraints1.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints1.gridy = 0;
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.insets = new Insets(0, 10, 10, 10);
			buttonPanel = new JPanel();
			buttonPanel.setLayout(new GridBagLayout());
			buttonPanel.add(getOkButton(), gridBagConstraints);
			buttonPanel.add(getCancelButton(), gridBagConstraints1);
		}
		return buttonPanel;
	}

	/**
	 * This method initializes optionPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getOptionPanel() {
		if (optionPanel == null) {
			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
			gridBagConstraints5.fill = GridBagConstraints.VERTICAL;
			gridBagConstraints5.gridy = 1;
			gridBagConstraints5.weightx = 1.0;
			gridBagConstraints5.anchor = GridBagConstraints.WEST;
			gridBagConstraints5.insets = new Insets(10, 0, 0, 0);
			gridBagConstraints5.gridx = 1;
			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
			gridBagConstraints4.gridx = 0;
			gridBagConstraints4.anchor = GridBagConstraints.EAST;
			gridBagConstraints4.insets = new Insets(10, 20, 0, 10);
			gridBagConstraints4.gridy = 1;
			upperLabel = new JLabel();
			upperLabel.setText("Upper");
			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
			gridBagConstraints3.fill = GridBagConstraints.VERTICAL;
			gridBagConstraints3.gridy = 0;
			gridBagConstraints3.weightx = 1.0;
			gridBagConstraints3.anchor = GridBagConstraints.WEST;
			gridBagConstraints3.insets = new Insets(10, 0, 0, 0);
			gridBagConstraints3.gridx = 1;
			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
			gridBagConstraints2.gridx = 0;
			gridBagConstraints2.anchor = GridBagConstraints.EAST;
			gridBagConstraints2.insets = new Insets(10, 20, 0, 10);
			gridBagConstraints2.gridy = 0;
			lowerLabel = new JLabel();
			lowerLabel.setText("Lower");
			optionPanel = new JPanel();
			optionPanel.setLayout(new GridBagLayout());
			optionPanel.add(lowerLabel, gridBagConstraints2);
			optionPanel.add(getLowerTextField(), gridBagConstraints3);
			optionPanel.add(upperLabel, gridBagConstraints4);
			optionPanel.add(getUpperTextField(), gridBagConstraints5);
		}
		return optionPanel;
	}

	/**
	 * This method initializes okButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getOkButton() {
		if (okButton == null) {
			okButton = new JButton();
			okButton.setText("Ok");
			okButton.addActionListener(this);
		}
		return okButton;
	}

	/**
	 * This method initializes cancelButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getCancelButton() {
		if (cancelButton == null) {
			cancelButton = new JButton();
			cancelButton.setText("Cancel");
			cancelButton.addActionListener(this);
		}
		return cancelButton;
	}

	/**
	 * This method initializes lowerTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getLowerTextField() {
		if (lowerTextField == null) {
			lowerTextField = new JTextField();
			lowerTextField.setPreferredSize(new Dimension(120, 20));
			lowerTextField.setText("0");
		}
		return lowerTextField;
	}

	/**
	 * This method initializes upperTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getUpperTextField() {
		if (upperTextField == null) {
			upperTextField = new JTextField();
			upperTextField.setPreferredSize(new Dimension(120, 20));
			upperTextField.setText("125");
		}
		return upperTextField;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton button=(JButton)e.getSource();
		if (button.getText().contentEquals("Ok")) {
			lower=lowerTextField.getText();
			upper=upperTextField.getText();
			String command=String.format("setThreshold(%s,%s);%nrun(\"Convert to Mask\");%n", lower,upper);
			panel.setCommand(command);
			panel.setOptionsSet(true);
			panel.setDialog(this);
			
		}else {
			lowerTextField.setText(lower);
			upperTextField.setText(upper);			
		}
		this.setVisible(false);
		
	}

	@Override
	public void windowActivated(WindowEvent e) {
		//ignore
		
	}

	@Override
	public void windowClosed(WindowEvent e) {
		//ignore
		
	}

	@Override
	public void windowClosing(WindowEvent e) {
		//ignore
		
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		lowerTextField.setText(lower);
		upperTextField.setText(upper);		
		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		//ignore
		
	}

	@Override
	public void windowIconified(WindowEvent e) {
		//ignore
		
	}

	@Override
	public void windowOpened(WindowEvent e) {
		lower=lowerTextField.getText();
		upper=upperTextField.getText();
		
	}

}  //  @jve:decl-index=0:visual-constraint="10,41"
